package test;

import javapack.Einlesen;

public class Fahrkartenautomat_Musterlsg {


		/**
		 * @param args
		 */
		public static void main(String[] args) {
			int fahrpreis, bezahlung, wechselgeld;

			do {

				fahrpreis = geldEingabe("Fahrpreis");
				bezahlung = geldEingabe("Bezahlung");

				if (korrekt(fahrpreis, 5, 1000)) {
					if (korrekt(bezahlung, fahrpreis, 1000)) {
						wechselgeld = bezahlung - fahrpreis;
						if (wechselgeld > 0) {
							geldRueckgabe(wechselgeld);
						} else
							System.out.println("kein Geldr�ckgabe notwendig");
					} else
						System.out.println("Bezahlung nicht korrekt");
				} else
					System.out.println("Fahrpreis nicht korrekt");

			} while (ok());

		}

		private static boolean korrekt(int geld, int min, int max) {
			if (geld % 5 == 0) {
				if (geld >= min && geld <= max) {
					return true;
				}
			}
			return false;
		}

		private static void geldRueckgabe(int wechselgeld) {
			String einheiten[] = { "2�", "1�", "50c", "20c", "10c", "5c" };
			int muenzWert[] = { 200, 100, 50, 20, 10, 5 }; // M�nzen in Cent
			String ausgabe = "";
			int muenzAnzahl;
			int muenzIndex = 0;

			while (wechselgeld > 0) {
				muenzAnzahl = wechselgeld / muenzWert[muenzIndex];
				if (muenzAnzahl > 0) {
					ausgabe = ausgabe + muenzAnzahl + '*' + einheiten[muenzIndex];
					wechselgeld = wechselgeld - muenzAnzahl * muenzWert[muenzIndex];
					if (wechselgeld > 0)
						ausgabe = ausgabe + ", ";
				}
				muenzIndex++;
			}
			System.out.println("Wechselgeld: " + ausgabe);
		}

		// die Eingabe und Behandlung von Fahrpreis und Bezahlung ist weitgehend
		// gleich
		private static int geldEingabe(String string) {
			double geld;
			int iGeld;
			System.out.print(string + "> ");
			geld = Einlesen.LiesDouble();
			iGeld = (int) (geld * 100 + 0.001);
			return iGeld;
		}

		public static boolean ok() {
			char antwort;
			while (true) {
				System.out.print("wollen Sie weitermachen?(j/n)");
				antwort = Einlesen.LiesChar();
				switch (antwort) {
				case 'j':
				case 'J':
					return true;
				case 'n':
				case 'N':
					return false;
				default:
					System.out.println("falsche Eingabe: " + antwort);
					break;
				}
			}
		}
	}
